﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using APA_DAO;
using TAM_SPORT;

namespace AMS
{
    public partial class FrmTraPhong : Form
    {
        private int soThuePhong = 0;
        public FrmTraPhong()
        {
            InitializeComponent();
        }

        public FrmTraPhong(int soThuePhong)
        {
            InitializeComponent();
            this.soThuePhong = soThuePhong;
            txtSoThuePhong.Text = soThuePhong.ToString();
            load(soThuePhong);
            this.BackColor = Color.LightCyan;
        }

        

        private void load(int id)
        {
            ThuePhongDao dao = new ThuePhongDao();
            DataRow tp = dao.getThuePhong(id);
            if (tp != null)
            {
                txtRoomNumber.Text = tp["SO_PHONG"].ToString();
                txtChiSoNuocTruoc.Text = float.Parse(tp["CHI_SO_NUOC"].ToString()).ToString("#,##0.##");
                txtChiSoDienTruoc.Text = float.Parse(tp["CHI_SO_DIEN"].ToString()).ToString("#,##0.##");
                txtCustomerName.Text = tp["HO_VA_TEN"].ToString();
                txtTienCoc.Text = float.Parse(tp["TIEN_COC"].ToString()).ToString("#,##0.##");
            }
            tp = dao.getPrice(id);
            if (tp != null)
            {
                txtElecPrice.Text = float.Parse(tp["ELE_PRICE"].ToString()).ToString("#,##0.##");
                txtWaterPrice.Text = float.Parse(tp["WAT_PRICE"].ToString()).ToString("#,##0.##");
                txtOtherPrice.Text = float.Parse(tp["OTHER_COST"].ToString()).ToString("#,##0.##");
                txtEleCost.Text = "0";
                txtWatCost.Text = "0";                
            }

        }

        private void txtChiSoNuocSau_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private String RemoveComma(String value)
        {
            if (value != null && value.Contains(","))
            {
                value = value.Replace(",", String.Empty).Trim();
            }
            return value;
        }

        private void count()
        {
            float elecPrice = float.Parse(txtElecPrice.Text.Replace(",", ""));
            float elecUsed = string.IsNullOrEmpty(txtTieuthuDien.Text) ? 0 : float.Parse(txtTieuthuDien.Text.Replace(",", ""));
            float elecCost = elecPrice * elecUsed;
            float watPrice = float.Parse(txtWaterPrice.Text.Replace(",", ""));
            float watUsed = string.IsNullOrEmpty(txtTieuThuNuoc.Text) ? 0 : float.Parse(txtTieuThuNuoc.Text.Replace(",", ""));
            float watCost = watPrice * watUsed;
            float otherCost = string.IsNullOrEmpty(txtOtherPrice.Text) ? 0 : float.Parse(txtOtherPrice.Text.Replace(",", ""));
 
            txtEleCost.Text = elecCost.ToString("#,##0.##");
            txtWatCost.Text = watCost.ToString("#,##0.##");
            txtTotal.Text = (elecCost + watCost + otherCost).ToString("#,##0.##");
            float total = 0;
            float cusPay = 0;
            total = string.IsNullOrEmpty(txtTotal.Text) ? 0 : float.Parse(txtTotal.Text.Replace(",", ""));
            cusPay = string.IsNullOrEmpty(txtCustPay.Text) ? 0 : float.Parse(txtCustPay.Text.Replace(",", ""));
            float tienCoc = string.IsNullOrEmpty(txtTienCoc.Text) ? 0 : float.Parse(txtTienCoc.Text.Replace(",", ""));
            if ((cusPay + tienCoc) > total)
            {
                txtRefund.Text = ((cusPay + tienCoc) - total).ToString("#,##0.##");
            }
            else
            {
                txtRefund.Text = "0";
            }    
        }

        private void txtChiSoNuocSau_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtChiSoNuocSau.Text))
            {
                float end = float.Parse(RemoveComma(txtChiSoNuocSau.Text));
                float start = float.Parse(RemoveComma(txtChiSoNuocTruoc.Text));
                txtTieuThuNuoc.Text = (end - start).ToString("#,##0.##");
                count();
            }
            if (RemoveComma(txtChiSoNuocSau.Text).Length > 3)
            {
                txtChiSoNuocSau.Text = decimal.Parse(RemoveComma(txtChiSoNuocSau.Text)).ToString("#,##0.##");
                txtChiSoNuocSau.Select(txtChiSoNuocSau.Text.Length, 0);
            }
        }

        private void dtpNgayThu_ValueChanged(object sender, EventArgs e)
        {
            txtNgayThu.Text = dtpNgayThu.Value.ToString("dd/MM/yyyy");
        }

        private void FrmTraPhong_Load(object sender, EventArgs e)
        {
            txtNgayThu.Text = DateTime.Now.ToString("dd/MM/yyyy");
        }

        private void txtChiSoDienSau_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtChiSoDienSau_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtChiSoDienSau.Text))
            {
                float end = float.Parse(RemoveComma(txtChiSoDienSau.Text));
                float start = float.Parse(RemoveComma(txtChiSoDienTruoc.Text));
                txtTieuthuDien.Text = (end - start).ToString("#,##0.##");
                count();
            }
            else
            {
                txtTieuthuDien.Text = "0";
            }
            if (RemoveComma(txtChiSoDienSau.Text).Length > 3)
            {
                txtChiSoDienSau.Text = decimal.Parse(RemoveComma(txtChiSoDienSau.Text)).ToString("#,##0.##");
                txtChiSoDienSau.Select(txtChiSoDienSau.Text.Length, 0);
            }
        }

        private void txtCustPay_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtCustPay_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtCustPay.Text))
            {
                float total = string.IsNullOrEmpty(txtTotal.Text) ? 0 : float.Parse(txtTotal.Text.Replace(",", ""));
                float cusPay = string.IsNullOrEmpty(txtCustPay.Text) ? 0 : float.Parse(txtCustPay.Text.Replace(",", ""));
                float tienCoc = string.IsNullOrEmpty(txtTienCoc.Text) ? 0 : float.Parse(txtTienCoc.Text.Replace(",", ""));
                if ((cusPay + tienCoc) > total)
                {
                    txtRefund.Text = ((cusPay + tienCoc) - total).ToString("#,##0.##");
                }
                else
                {
                    txtRefund.Text = "0";
                }
            }
            if (RemoveComma(txtCustPay.Text).Length > 3)
            {
                txtCustPay.Text = decimal.Parse(RemoveComma(txtCustPay.Text)).ToString("#,##0.##");
                txtCustPay.Select(txtCustPay.Text.Length, 0);
            }
        }

        private bool validate()
        {
            float before = 0;
            float after = 0;
            bool errFlg = false;
            StringBuilder str = new StringBuilder();
            int i = 0;

            if (string.IsNullOrEmpty(txtChiSoDienSau.Text))
            {
                i++;
                str.Append(i + ". Bạn chưa nhập chỉ số điện sau");
                errFlg = true;
            }
            else
            {
                if (!float.TryParse(txtChiSoDienSau.Text, out after))
                {
                    i++;
                    str.Append(i + ". Chỉ số điện sau phải là số");
                    errFlg = true;
                }
            }

            if (!float.TryParse(txtChiSoDienTruoc.Text, out before))
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Chỉ số điện trước phải là số.");
                errFlg = true;
            }

            if (after < before)
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Chỉ số điện sau phải lớn hơn hoặc bằng chỉ số điện trước.");
                errFlg = true;
            }

            if (!float.TryParse(txtChiSoNuocTruoc.Text, out before))
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Chỉ số nước trước phải là số.");
                errFlg = true;
            }

            if (string.IsNullOrEmpty(txtChiSoNuocSau.Text))
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Chưa nhập chỉ số nước sau.");
                errFlg = true;
            }
            else
            {
                if (!float.TryParse(txtChiSoNuocSau.Text, out after))
                {
                    i++;
                    if (errFlg)
                    {
                        str.Append("\n");
                    }
                    str.Append(i + ". Chỉ số nước sau phải là số.");
                    errFlg = true;
                }
            }

            if (after < before)
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Chỉ số nước sau phải lớn hơn hoặc bằng chỉ số nước trước.");
                errFlg = true;
            }


            if (string.IsNullOrEmpty(txtNgayThu.Text))
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Chưa nhập ngày thu tiền.");
                errFlg = true;
            }
            else
            {
                i++;
                DateTime day;
                if (!DateTime.TryParseExact(txtNgayThu.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
                {
                    if (errFlg)
                    {
                        str.Append("\n");
                    }
                    str.Append(i.ToString() + ". Ngày thu sai định dạng.");
                    errFlg = true;
                }
            }

            if (!string.IsNullOrEmpty(txtOtherPrice.Text) &&
                !float.TryParse(txtOtherPrice.Text, out after))
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Chi phí khác phải là số.");
                errFlg = true;
            }

            if (!string.IsNullOrEmpty(txtCustPay.Text) &&
                !float.TryParse(txtCustPay.Text, out after))
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Số tiền khách trả phải là số.");
                errFlg = true;
            }

            float total = string.IsNullOrEmpty(txtTotal.Text) ? 0 : float.Parse(txtTotal.Text.Replace(",", ""));
            float cusPay = string.IsNullOrEmpty(txtCustPay.Text) ? 0 : float.Parse(txtCustPay.Text.Replace(",", ""));
            float tienCoc = string.IsNullOrEmpty(txtTienCoc.Text) ? 0 : float.Parse(txtTienCoc.Text.Replace(",", ""));
            if ((cusPay + tienCoc) < total)
            {
                i++;
                if (errFlg)
                {
                    str.Append("\n");
                }
                str.Append(i + ". Tổng tiền khách trả và tiền đặc cọc phải lớn hơn hoặc bằng tổng tiền khách phải thanh toán.");
                errFlg = true;
            }


            if (!string.IsNullOrEmpty(str.ToString()))
            {
                Error er = new Error(str.ToString());
                er.ShowDialog();
                er.Dispose();
            }
            return !errFlg;
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (validate())
            {
                DateTime collectDay;
                DateTime.TryParseExact(txtNgayThu.Text.ToString(), "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out collectDay);

                float chiSoNuocTruoc = string.IsNullOrEmpty(txtChiSoNuocTruoc.Text)? 0: float.Parse(txtChiSoNuocTruoc.Text.Replace(",",""));
                float chiSoNuocSau = string.IsNullOrEmpty(txtChiSoNuocSau.Text) ? 0 : float.Parse(txtChiSoNuocSau.Text.Replace(",", ""));
                float donGiaNuoc = string.IsNullOrEmpty(txtWaterPrice.Text) ? 0 : float.Parse(txtWaterPrice.Text.Replace(",", ""));

                float chiSoDienTruoc = string.IsNullOrEmpty(txtChiSoDienTruoc.Text) ? 0 : float.Parse(txtChiSoDienTruoc.Text.Replace(",", ""));
                float chiSoDienSau = string.IsNullOrEmpty(txtChiSoDienSau.Text) ? 0 : float.Parse(txtChiSoDienSau.Text.Replace(",", ""));
                float donGiaDien = string.IsNullOrEmpty(txtChiSoDienSau.Text) ? 0 : float.Parse(txtElecPrice.Text.Replace(",", ""));

                float otherCost = string.IsNullOrEmpty(txtOtherPrice.Text) ? 0 : float.Parse(txtOtherPrice.Text.Replace(",", ""));


                ThuePhongDao dao = new ThuePhongDao();
                if (dao.traPhong(this.soThuePhong, collectDay,
                    chiSoNuocTruoc, chiSoNuocSau, donGiaNuoc, chiSoDienTruoc, chiSoDienSau, donGiaDien, otherCost))
                {
                    Result re = new Result("Trả phòng thành công.");
                    re.ShowDialog();
                    re.Dispose();
                    this.Close();
                }
                else
                {
                    Error er = new Error("Trả phòng thất bại.");
                    er.ShowDialog();
                    er.Dispose();
                }
            }
        }
    }
}
